﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using ABC_SA_DM;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using System.Data;


namespace ABC_SA_DAL
{
    public class Destino_DAL
    {


        private DataTable rs;
        private DataTable _resultset;

        //******************Procedimientos almacenados******************//


        //  metodo agregar destino

        public bool agregarDestino(Destino d)
        {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            string commandName = "Agrega_Destino";
            // int nuevoIDEvento = 0;
            try
            {
                using (conn)
                {
                    //conn.Open();

                    SqlCommand insertCommand = new SqlCommand(commandName, conn);

                    insertCommand.CommandType = CommandType.StoredProcedure;

                    insertCommand.Parameters.Add(new SqlParameter("@nombre", SqlDbType.NVarChar, 50) { Value = d.NombreDestino });
                    insertCommand.Parameters.Add(new SqlParameter("@pais", SqlDbType.NVarChar, 50) { Value = d.Pais });
                    insertCommand.Parameters.Add(new SqlParameter("@provincia", SqlDbType.NVarChar, 50) { Value = d.Provincia });
                    insertCommand.Parameters.Add(new SqlParameter("@ciudad", SqlDbType.NVarChar, 50) { Value = d.Ciudad });
                    insertCommand.Parameters.Add(new SqlParameter("@descripcion", SqlDbType.NVarChar, 50) { Value = d.Descripcion });
                    insertCommand.Parameters.Add(new SqlParameter("@gpsx", SqlDbType.NVarChar, 50) { Value = d.Gpsx });
                    insertCommand.Parameters.Add(new SqlParameter("@gpsy", SqlDbType.NVarChar, 50) { Value = d.Gpsy });
                    insertCommand.Parameters.Add(new SqlParameter("@imagen", SqlDbType.Image) { Value = d.Imagen });

                    insertCommand.ExecuteNonQuery();
                }
                return true;

            }
            catch (InvalidOperationException)
            {
                throw new System.InvalidOperationException("Error de conexion a la BD");
            }
            catch (Exception ex)
            {
                throw new System.ArgumentException("Error al insertar destinos", ex);
            }

        }// fin del metodo agregar destino




        // metodo modificar destino
        public bool modificarDestino(Destino d)
        {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            string commandName = "Modifica_Destino";
            // int nuevoIDEvento = 0;
            try
            {
                using (conn)
                {
                    //conn.Open();

                    SqlCommand updateCommand = new SqlCommand(commandName, conn);

                    updateCommand.CommandType = CommandType.StoredProcedure;

                    updateCommand.Parameters.Add(new SqlParameter("@id_destino", SqlDbType.Int) { Value = d.IdDestino });
                    updateCommand.Parameters.Add(new SqlParameter("@nombre", SqlDbType.NVarChar, 50) { Value = d.NombreDestino });
                    updateCommand.Parameters.Add(new SqlParameter("@pais", SqlDbType.NVarChar, 50) { Value = d.Pais });
                    updateCommand.Parameters.Add(new SqlParameter("@provincia", SqlDbType.NVarChar, 50) { Value = d.Provincia });
                    updateCommand.Parameters.Add(new SqlParameter("@ciudad", SqlDbType.NVarChar, 50) { Value = d.Ciudad });
                    updateCommand.Parameters.Add(new SqlParameter("@descripcion", SqlDbType.NVarChar, 50) { Value = d.Descripcion });
                    updateCommand.Parameters.Add(new SqlParameter("@gpsx", SqlDbType.NVarChar, 50) { Value = d.Gpsx });
                    updateCommand.Parameters.Add(new SqlParameter("@gpsy", SqlDbType.NVarChar, 50) { Value = d.Gpsy });
                    updateCommand.Parameters.Add(new SqlParameter("@imagen", SqlDbType.Image) { Value = d.Imagen });

                    updateCommand.ExecuteNonQuery();
                }
                return true;

            }
            catch (InvalidOperationException)
            {
                throw new System.InvalidOperationException("Error de conexion a la BD");
            }
            catch (Exception ex)
            {
                throw new System.ArgumentException("Error al modificar destinos", ex);
            }

        }// fin del metodo amodificar destino





        // eliminar destino
        public Boolean EliminarDestino(int id_destino)
        {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            string commandName = "Elimina_Destino";

            try
            {
                using (conn)
                {


                    SqlCommand deleteCommand = new SqlCommand(commandName, conn);

                    deleteCommand.CommandType = CommandType.StoredProcedure;

                    deleteCommand.Parameters.Add(new SqlParameter("@id_destino", SqlDbType.Int) { Value = id_destino });

                    deleteCommand.ExecuteNonQuery();

                }
                return true;
            }
            catch (InvalidOperationException)
            {
                throw new System.InvalidOperationException("Error de conexion a la BD");
            }
            catch (Exception ex)
            {
                throw new System.ArgumentException("Error al eliminar destino", ex);
            }
        }// fin metodo eliminar destino






        // metodo consultar listaDestinos con store Procedure
        public Destino consultaDestinoSimple()
        {
            // Consulta toda la lista de paquetes

            Destino destino = new Destino();

            string sql = "Consulta_Destino_Simple";

            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();
            SqlCommand comando = new SqlCommand(sql, conn);
            SqlDataReader reader = comando.ExecuteReader();

            try
            {
                while (reader.Read())
                {

                    destino.NombreDestino = Convert.ToString(reader.GetValue(0));
                    destino.Pais = Convert.ToString(reader.GetValue(1));
                    destino.Provincia = Convert.ToString(reader.GetValue(2));
                    destino.Ciudad = Convert.ToString(reader.GetValue(3));
                    destino.Descripcion = Convert.ToString(reader.GetValue(4));
                    destino.Gpsx = Convert.ToString(reader.GetValue(5));
                    destino.Gpsy = Convert.ToString(reader.GetValue(6));
                    destino.Imagen = (byte[])reader.GetValue(7);
                }
            }
            catch (Exception e)
            {
                Console.Write(e);
            }

            conn.Close();

            return destino;

        }







        // consultar destinos
        public DataTable GetAllDestinos()
        {

            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            string commandName = "ObtenerTodosDestinos";

            _resultset = new DataTable("Destinos");

            try
            {
                using (conn)
                {


                    SqlDataAdapter selectAdapter = new SqlDataAdapter(commandName, conn);

                    selectAdapter.Fill(_resultset);
                }
                return _resultset;
            }
            catch (InvalidOperationException)
            {
                throw new System.InvalidOperationException("Error de conexion a la BD");
            }
            catch (Exception ex)
            {
                throw new System.ArgumentException("Error al consultar destinos", ex);
            }


        } // fin del metodo consultar destinos











        // NO BORRAR DE AQUI PARA ABAJO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        public List<Destino> consultaListaDestinos()
        {
            List<Destino> ListaD = new List<Destino>();

            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "Select nombre, id_destino, provincia , descripcion, imagen, pais, ciudad, gpsx from destino";
            comando.CommandType = System.Data.CommandType.Text;
            comando.Connection = conn;
            SqlDataReader reader = comando.ExecuteReader();
            try
            {
                while (reader.Read())
                {
                    Destino destConsultado = new Destino();

                    destConsultado.NombreDestino = Convert.ToString(reader.GetValue(0));
                    destConsultado.IdDestino = Convert.ToInt32(reader.GetValue(1));
                    destConsultado.Provincia = Convert.ToString(reader.GetValue(2));
                    destConsultado.Descripcion = Convert.ToString(reader.GetValue(3));
                    //destConsultado.Imagen = Convert.ToString(reader.GetValue(4));
                    //destConsultado.Imagen = (byte[])reader["Imagen"];;
                    destConsultado.Ciudad = Convert.ToString(reader.GetValue(6));
                    // destConsultado.Gps = Convert.ToString(reader.GetValue(7));
                    ListaD.Add(destConsultado);
                }
            }
            catch (Exception e)
            {
                Console.Write(e);
            }

            conn.Close();

            return ListaD;
        }




        // sin StoreProcedure
        public Destino mostrarDestinoSimple(int idDestino)
        {
            //Se consulta un paquete en la BD
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();
            SqlCommand comando = new SqlCommand();

            comando.CommandText = "Select nombre, id_destino, provincia , descripcion, imagen, pais, ciudad, gps  from  destino where id_destino=" + idDestino;
            comando.CommandType = System.Data.CommandType.Text;
            comando.Connection = conn;
            SqlDataReader reader = comando.ExecuteReader();
            Destino destConsultado = new Destino();
            try
            {
                if (reader.Read())
                {
                    destConsultado.NombreDestino = Convert.ToString(reader.GetValue(0));
                    destConsultado.IdDestino = Convert.ToInt32(reader.GetValue(1));
                    destConsultado.Provincia = Convert.ToString(reader.GetValue(2));
                    destConsultado.Descripcion = Convert.ToString(reader.GetValue(3));
                    // destConsultado.Imagen = Convert.ToString(reader.GetValue(4));
                    destConsultado.Pais = Convert.ToString(reader.GetValue(5));
                    destConsultado.Ciudad = Convert.ToString(reader.GetValue(6));
                    //destConsultado.Gps = Convert.ToString(reader.GetValue(7));

                }
            }
            catch (Exception e)
            {
                Console.Write(e);
            }
            conn.Close();

            return destConsultado;
        }
    }
}
